package com.zzvcom.office.entities;

import com.zzvcom.office.util.IdUtil;
import lombok.Getter;
import lombok.Setter;

/*import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;*/
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.ToString;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 自定义的文件实体类
 */
@Entity
@Table(name = "`office_file`")
@Getter
@Setter
@ToString
public class OfficeFile implements Serializable {
    /**
     * 文件已经初始化
     */
    public static final Integer STATUS_INIT = 0;
    /**
     * 文件转换成功
     */
    public static final Integer STATUS_CONVERTER_SUCCESS = 1;
    /**
     * 文件转码失败
     */
    public static final Integer STATUS_CONVERTER_FAIL = 2;

    /**
     * 直接直接上传
     */
    public static final Integer SOURCE_TYPE_UPLOAD = 0;
    /**
     * 文件下载获取
     */
    public static final Integer SOURCE_TYPE_DOWNLOAD = 1;

    /**
     * 是否已经存在本地 0 是否
     */
    public static final Integer LOCAL_FLAG_NO = 0;
    /**
     * 是否已经存在本地 1 是
     */
    public static final Integer LOCAL_FLAG_YES = 1;

    /**
     * 新增上传文件
     *
     * @param id
     * @return
     */
    public OfficeFile newUpload(String id) {
        this.id = id;
        this.status = STATUS_INIT;
        this.sourceType = SOURCE_TYPE_UPLOAD;
        this.downloadUrl = "0";
        this.fileKey = IdUtil.getFileKey(id);
        this.createTime = LocalDateTime.now();
        this.localFlag = LOCAL_FLAG_YES;
        this.path = IdUtil.getPath();
        return this;
    }

    /**
     * 新增下载文件
     *
     * @param id
     * @return
     */
    public OfficeFile newDownload(String id, String downloadUrl) {
        this.id = id;
        this.status = STATUS_INIT;
        this.sourceType = SOURCE_TYPE_DOWNLOAD;
        this.downloadUrl = downloadUrl;
        this.fileKey = IdUtil.getFileKey(id);
        this.createTime = LocalDateTime.now();
        this.localFlag = LOCAL_FLAG_NO;
        this.path = IdUtil.getPath();
        return this;
    }

    /**
     * 文件编码,使用uuid
     */
    @Id
    private String id;
    /**
     * 文件名称，带有后缀名真实文件名称
     */
    private String name;
    /**
     * 原始的文件名称
     */
    private String sourceName;
    /**
     * 文件扩展名称
     */
    private String ext;
    /**
     * 文件大小
     */
    private Long size;
    /**
     * 状态
     */
    private Integer status;
    /**
     * 0 直接上传，1 下载
     */
    private Integer sourceType;
    /**
     * 文件源路径 HTTP协议
     */
    @Column(name = "download_url", length = 2048)
    private String downloadUrl;
    /**
     * 新文件后最新文件扩展名
     */
    private String newExt;
    /**
     * 新文件 大小
     */
    private Long newFileSize;
    /**
     * 根据提供的文档内容，key 每次修改文档后需要重新生成，主要原因与文档服务的缓存机制相关：
     * key 是服务用于识别文档的唯一标识符。当发送已知的 key 时，服务会从缓存中获取对应文档。如果文档被编辑并保存后，key 未重新生成，服务会误认为文档未发生变化，继续使用缓存中的旧版本，导致用户无法获取最新编辑后的内容。
     * 因此，为了确保服务能正确识别到文档的更新，每次编辑并保存文档后，必须重新生成 key，以避免缓存中的旧版本被错误调用，保证访问的是最新版本的文档。
     * 文件的key，保存的时候使用，key+当前毫秒
     * https://api.onlyoffice.com/docs/docs-api/usage-api/config/document/#key
     */
    private String fileKey;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    /**
     * 文件定义标题
     * 文件转换和重命名的时候进行转化重新复制。
     */
    private String title;

    /**
     * 是否文件已经存在本地 0 是 1否，
     */
    private int localFlag;
    /**
     * 本地相对路径
     */
    private String path;
}
